cmake_minimum_required(VERSION 3.5)

project(cmake_demo)

set(CMAKE_C_STANDARD 11)

# 指定搜索头文件路径，多个使用空格隔开
# include_directories(.)

add_compile_options(-std=c11 -Wall)

if (CMAKE_HOST_UNIX)
    add_definitions(-D_LINUX_)
else()
    add_definitions(-D_WINDOWS_)
endif()

add_subdirectory(lib)
add_subdirectory(src)
# link_libraries(-lm)

# 指定src目录下存放了源文件，当执行cmake时，就会进入src目录下去找src目录下的CMakeLists.txt
# add_subdirectory(src)

# 会把当前根目录所有文件加进来，如果要排除某些文件，请使用下面注释掉的语句
# aux_source_directory(. SRC_LIST)

# set( SRC_LIST
# 	 ./main.c
# 	 ./girl.c
# 	 ./musk.c)

# add_executable(main ${SRC_LIST})

#target_link_libraries(main -lm)

# CMake自带的预定义变量
# EXECUTABLE_OUTPUT_PATH ：目标二进制可执行文件的存放位置
# PROJECT_SOURCE_DIR：工程的根目录

# 如何编译动态库或静态库
# add_library(testFunc_shared SHARED ${SRC_LIST})
# add_library(testFunc_static STATIC ${SRC_LIST})
# set_target_properties(testFunc_shared PROPERTIES OUTPUT_NAME "testFunc")
# set_target_properties(testFunc_static PROPERTIES OUTPUT_NAME "testFunc")
# set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

# 说明：
# add_library: 生成动态库或静态库(第1个参数指定库的名字；第2个参数决定是动态还是静态，如果没有就默认静态；第3个参数指定生成库的源文件)
# set_target_properties: 设置最终生成的库的名称，还有其它功能，如设置库的版本号等等
# LIBRARY_OUTPUT_PATH: 库文件的默认输出路径，这里设置为工程目录下的lib目录

# 链接库
# find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)

# 说明：
# find_library: 在指定目录下查找指定库，并把库的绝对路径存放到变量里，其第一个参数是变量名称，第二个参数是库名称，第三个参数是HINTS，第4个参数是路径，其它用法可以参考cmake文档
# target_link_libraries: 把目标文件与库文件进行链接

# 添加编译选项
# add_compile_options(-std=c++11 -Wall) 

# 说明：
# 编译程序时想添加一些编译选项，如-Wall，-std=c++11等，就可以使用add_compile_options来进行操作

# 添加宏定义
# add_definitions(-DWWW1)

# 添加控制选项
# option(MYDEBUG "enable debug compilation" OFF)
# if (MYDEBUG)
#     add_executable(main2 main2.c)
# else()
#     message(STATUS "Currently is not in debug mode")
# endif()

# 说明，添加控制选项后，就可以向命令传递参数，方式如下：
# cmake .. -DWWW1=ON -DWWW2=OFF && make
# cmake .. -DWWW1=OFF -DWWW2=ON && make
# cmake .. -DWWW1=ON -DWWW2=ON && make